﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "GcmpModel.h"
#include "UniIdentity.h"

/// \brief 声明参数类型GUID
/// \param PARAMETER_TYPE_NAME 参数类型枚举变量名
#define DECLARE_PARAMETER_TYPE_GUID(PARAMETER_TYPE_NAME) const Guid c_guid_##PARAMETER_TYPE_NAME

/// \brief 获取参数类型定义数据
///
/// \param PARAMETER_TYPE_NAME 参数类型枚举变量名
/// \return 参数类型定义数据
#define PARAMETER_TYPE(PARAMETER_TYPE_NAME) \
    GetParameterTypeId_##PARAMETER_TYPE_NAME()


/// \brief 实现获取参数类型定义数据的方法
/// \param PARAMETER_TYPE_NAME 参数类型枚举变量名
/// \param DEBUGINFO 内建参数调试信息
#define IMPLEMENT_PARAMETER_TYPE(PARAMETER_TYPE_NAME, DEBUGINFO) \
    const gcmp::UniIdentity& GetParameterTypeId_##PARAMETER_TYPE_NAME() \
    { \
        static gcmp::UniIdentity c_uid_##PARAMETER_TYPE_NAME(c_guid_##PARAMETER_TYPE_NAME, DEBUGINFO); \
        return c_uid_##PARAMETER_TYPE_NAME; \
    } \


/// \brief 声明获取参数类型定义数据的方法
/// \param PARAMETER_TYPE_NAME 参数类型枚举变量名
#define DEFINE_PARAMETER_TYPE(PARAMETER_TYPE_NAME) \
    GCMP_MODEL_EXPORT const gcmp::UniIdentity& GetParameterTypeId_##PARAMETER_TYPE_NAME();

// 参数类型
DEFINE_PARAMETER_TYPE(Invalid); // 无效
DEFINE_PARAMETER_TYPE(None);    // 无
DEFINE_PARAMETER_TYPE(Custom);  // 自定义
DEFINE_PARAMETER_TYPE(Length);  // 长度
DEFINE_PARAMETER_TYPE(Area);    // 面积
DEFINE_PARAMETER_TYPE(Volume);  // 体积
DEFINE_PARAMETER_TYPE(Angle);   // 角度
DEFINE_PARAMETER_TYPE(Slope);   // 坡度
DEFINE_PARAMETER_TYPE(Number);  // 个数
DEFINE_PARAMETER_TYPE(Text);    // 文本
DEFINE_PARAMETER_TYPE(Geometry);  // 几何
DEFINE_PARAMETER_TYPE(Density);  // 密度
DEFINE_PARAMETER_TYPE(YesNo);  // 是否
DEFINE_PARAMETER_TYPE(Float);   // 浮点
DEFINE_PARAMETER_TYPE(Material);  // 材质
DEFINE_PARAMETER_TYPE(ValueList);  // 值列表
DEFINE_PARAMETER_TYPE(StandardCodeReference);  // 标准编码引用类型
DEFINE_PARAMETER_TYPE(Color); // 颜色
DEFINE_PARAMETER_TYPE(TextStyle); // 文字样式
#undef DEFINE_PARAMETER_TYPE